using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace EcoEstadisticas
{
    class RegistradorEnBD
    {
        public void insertarNbisPor(int anio,int trimestre){
        String hogares = "SELECT CODUSU,NRO_HOGAR,II1,IV1,IV11 FROM HOME WHERE ANO4=@ANIO AND TRIMESTRE = @TRIM";
        SqlCommand todosLosHomesDeUnAnioYTrimestre = new SqlCommand(hogares,ConeccionBD.getInstance().getConneccion());
        todosLosHomesDeUnAnioYTrimestre.Parameters.Add("@ANIO", SqlDbType.SmallInt);
        todosLosHomesDeUnAnioYTrimestre.Parameters.Add("@TRIM", SqlDbType.TinyInt);
        todosLosHomesDeUnAnioYTrimestre.Parameters["@ANIO"].Value = anio;
        todosLosHomesDeUnAnioYTrimestre.Parameters["@TRIM"].Value = trimestre;
        SqlDataAdapter adapter = new SqlDataAdapter(todosLosHomesDeUnAnioYTrimestre);
        DataTable tabla = new DataTable();
        NbixCalculator calculadorDeNbi = new NbixCalculator();

        String registrosNbiHogar = "INSERT INTO NBI_HOGAR VALUES(@CODUSU,@HOGAR,@ANIO,@TRIMESTRE,@NBI1,@NBI2,@NBI3,@NBI4,@NBI5)";
        SqlCommand insertNbiHogar = new SqlCommand(registrosNbiHogar,ConeccionBD.getInstance().getConneccion());
        insertNbiHogar.Parameters.Add("@CODUSU",SqlDbType.Char,8);
        insertNbiHogar.Parameters.Add("@HOGAR",SqlDbType.TinyInt);
        insertNbiHogar.Parameters.Add("@NBI1",SqlDbType.Bit);
        insertNbiHogar.Parameters.Add("@NBI2", SqlDbType.Bit);
        insertNbiHogar.Parameters.Add("@NBI3", SqlDbType.Bit);
        insertNbiHogar.Parameters.Add("@NBI4", SqlDbType.Bit);
        insertNbiHogar.Parameters.Add("@NBI5", SqlDbType.Bit);
        insertNbiHogar.Parameters.Add("@ANIO", SqlDbType.SmallInt);
        insertNbiHogar.Parameters.Add("@TRIMESTRE", SqlDbType.TinyInt);
        insertNbiHogar.Parameters["@ANIO"].Value = anio;
        insertNbiHogar.Parameters["@TRIMESTRE"].Value = trimestre;

        adapter.Fill(tabla);

        foreach (DataRow fila in tabla.Rows)
            {
                int codusu = System.Convert.ToInt32(fila["CODUSU"]);
                int hogar = System.Convert.ToInt16(fila["NRO_HOGAR"]);
                int IIuno = System.Convert.ToInt16(fila["II1"]);
                int IVuno = System.Convert.ToInt16(fila["IV1"]);
                int IVten = System.Convert.ToInt16(fila["IV11"]);

                bool nbi1 = calculadorDeNbi.CalculaNbiUno(codusu, hogar, IIuno);
                bool nbi2 = calculadorDeNbi.CalcularNbiDos(IVuno);
                bool nbi3 = calculadorDeNbi.CalcularNbiTres(IVten);
                bool nbi4 = calculadorDeNbi.CalcularNbiCuatro(codusu, hogar);
                bool nbi5 = calculadorDeNbi.CalcularNbiCinco(codusu, hogar);

                insertNbiHogar.Parameters["@CODUSU"].Value = codusu;
                insertNbiHogar.Parameters["@HOGAR"].Value = hogar;
                insertNbiHogar.Parameters["@NBI1"].Value = nbi1;
                insertNbiHogar.Parameters["@NBI2"].Value = nbi2;
                insertNbiHogar.Parameters["@NBI3"].Value = nbi3;
                insertNbiHogar.Parameters["@NBI4"].Value = nbi4;
                insertNbiHogar.Parameters["@NBI5"].Value = nbi5;
                try
                {
                    insertNbiHogar.ExecuteNonQuery();
                    System.Console.WriteLine("insertado");
                }catch(SqlException e){
                    System.Console.WriteLine(e.Message);
                    ConeccionBD.getInstance().cerraConeccion();
                }
            }
        }

        public void insertarPonderacionNBIindividual(int anio, int trimestre, int region)
        {
            double PNBIUNO = 0;
            double PNBIDOS = 0;
            double PNBITRES = 0;
            double PNBICUATRO = 0;
            double PNBICINCO = 0;
            PonderadorPorNBI ponderador = new PonderadorPorNBI();
            DataTable tabla = new DataTable();
            tabla = GateWayCustom.getInstance().hogaresConNbi(anio, trimestre, region);
            String insertIntoNBIPonderacion = "INSERT INTO NBI_PONDERACION_REGION values(@CANTIDAD_HOGARES_PARTICULARES,@TOTAL_HOGARES,@PNBI1,@PNBI2,@PNBI3,@PNBI4,@PNBI5,@REGION,@ANIO,@TRIMESTRE)";
            SqlCommand insert = new SqlCommand(insertIntoNBIPonderacion, ConeccionBD.getInstance().getConneccion());
            insert.Parameters.Add("@CANTIDAD_HOGARES_PARTICULARES", SqlDbType.Int);
            insert.Parameters.Add("@TOTAL_HOGARES", SqlDbType.Int);
            insert.Parameters.Add("@PNBI1",SqlDbType.Float);
            insert.Parameters.Add("@PNBI2", SqlDbType.Float);
            insert.Parameters.Add("@PNBI3", SqlDbType.Float);
            insert.Parameters.Add("@PNBI4", SqlDbType.Float);
            insert.Parameters.Add("@PNBI5", SqlDbType.Float);
            insert.Parameters.Add("@ANIO", SqlDbType.SmallInt);
            insert.Parameters.Add("@TRIMESTRE", SqlDbType.TinyInt);
            insert.Parameters.Add("@REGION", SqlDbType.TinyInt);
            PNBIUNO = ponderador.pondera( "NBI1",anio, trimestre,tabla);
            PNBIDOS = ponderador.pondera("NBI2", anio, trimestre, tabla);
            PNBITRES = ponderador.pondera("NBI3", anio, trimestre, tabla);
            PNBICUATRO = ponderador.pondera("NBI4", anio, trimestre, tabla);
            PNBICINCO = ponderador.pondera("NBI5", anio, trimestre, tabla);
            insert.Parameters["@TOTAL_HOGARES"].Value = tabla.Rows.Count;
            insert.Parameters["@CANTIDAD_HOGARES_PARTICULARES"].Value = System.Convert.ToInt32(ponderador.cunantosCumplenConElNBI());
            insert.Parameters["@PNBI1"].Value = PNBIUNO;
            insert.Parameters["@PNBI2"].Value = PNBIDOS;
            insert.Parameters["@PNBI3"].Value = PNBITRES;
            insert.Parameters["@PNBI4"].Value = PNBIDOS;
            insert.Parameters["@PNBI5"].Value = PNBICINCO;
            insert.Parameters["@ANIO"].Value = anio;
            insert.Parameters["@TRIMESTRE"].Value = trimestre;
            insert.Parameters["@REGION"].Value = region;
            insert.ExecuteNonQuery();            
        }
    }
}
